package mirrormonkey.state;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import mirrormonkey.state.annotations.ReceiveStateFrom;
import mirrormonkey.state.annotations.UpdateState;
import mirrormonkey.state.tools.identity.entities.ServerIdAwareTestBox;
import mirrormonkey.state.tools.identity.entities.SpecialServerIdAwareTestBox;
import mirrormonkey.state.tools.notification.entities.ServerStateUpdateEntity;
import mirrormonkey.state.tools.state.entities.ServerStateSyncBox;
import mirrormonkey.util.annotations.control.DefinePreset;
import mirrormonkey.util.annotations.hfilter.ClassFilter;
import mirrormonkey.util.annotations.hfilter.ClassFilter.HierarchyType;
import mirrormonkey.util.annotations.hfilter.ClassFilter.SelectType;

public final class AnnotationPresets {

	@Retention(RetentionPolicy.RUNTIME)
	public @interface ServerToClient {
	}

	@DefinePreset(ServerToClient.class)
	@UpdateState(freq = 0.001f)
	@ReceiveStateFrom({ @ClassFilter(select = SelectType.INCLUDE, hierarchy = HierarchyType.SPECIFIC, classes = {
			ServerStateSyncBox.class, ServerIdAwareTestBox.class,
			ServerStateUpdateEntity.class }) })
	public Object stcPreset;

	@Retention(RetentionPolicy.RUNTIME)
	public @interface SpecialServerToClient {
	}

	@DefinePreset(SpecialServerToClient.class)
	@UpdateState(freq = 0.001f)
	@ReceiveStateFrom({ @ClassFilter(select = SelectType.INCLUDE, hierarchy = HierarchyType.SPECIFIC, classes = { SpecialServerIdAwareTestBox.class }) })
	public Object sstcPreset;
}